//package com.bestcem.xm.ticket.job.config;
//
//import com.bestcem.xm.ticket.job.TicketNotificationJob;
//import com.bestcem.xm.ticket.job.TicketRspdJob;
//import lombok.extern.slf4j.Slf4j;
//import org.quartz.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Configuration;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//
///**
// * @author gy.liu
// * @date 2021/5/21
// */
//@Slf4j
//@Configuration
//public class TicketAsyncJobConfig {
//
//    private static final Logger EMAIL_LOG = LoggerFactory.getLogger("EmailErrorLog");
//
//    /**
//     * 定时任务开关
//     */
//    @Value("${spring.quartz.auto-startup:false}")
//    private boolean taskEnable;
//
//    /**
//     * 条件检查
//     */
//    @Value("${app.ticket.task.condition-cron:0 */1 * * * ?}")
//    private String conditionCheckCron;
//
//    /**
//     * 通知提醒
//     */
//    @Value("${app.ticket.task.notify-cron:0 0 3 * * ?}")
//    private String notifyCron;
//
//    /**
//     * Quartz 调度器
//     */
//    @Resource
//    private Scheduler scheduler;
//
//    /**
//     * 初始化job任务
//     *
//     * @author XiaoYunSong <ys.xiao@idiaoyan.com>
//     * @date 2021/9/16 16:40
//     */
//    @PostConstruct
//    private void init() {
//        if (!taskEnable) {
//            log.error("[Ticket] 定时任务未开启");
//            return;
//        }
//        initJob();
//    }
//
//    /**
//     * 初始化所有定时任务
//     *
//     * @author gy.liu
//     * @date 2021/9/16 16:39
//     */
//    private void initJob() {
//        if (log.isInfoEnabled()) {
//            log.info("[Ticket] 初始化定时任务开始");
//        }
//        String jobGroupName = "ticket:jobGroup";
//        String triggerGroupName = "ticket:triggerGroup";
//
//        // 条件检查
//        String conditionJobName = "ticket:condition";
//        CronScheduleBuilder conditionCheckJobScheduleBuilder = CronScheduleBuilder.cronSchedule(conditionCheckCron);
//
//        // 通知提醒
//        String notifyJobName = "ticket:notify";
//        CronScheduleBuilder notifyJobScheduleBuilder = CronScheduleBuilder.cronSchedule(notifyCron);
//
//        // 注册定时任务
//        registerJob(conditionJobName, jobGroupName, triggerGroupName, TicketRspdJob.class, conditionCheckJobScheduleBuilder);
//        registerJob(notifyJobName, jobGroupName, triggerGroupName, TicketNotificationJob.class, notifyJobScheduleBuilder);
//        if (log.isInfoEnabled()) {
//            log.info("[Ticket] 初始化定时任务完成");
//        }
//    }
//
//    /**
//     * 注册定时任务
//     *
//     * @param name             任务唯一标识; 用于构造 任务名/触发器名
//     * @param jobGroupName     任务组名
//     * @param triggerGroupName 触发器组名
//     * @param jobClass         任务实现类
//     * @param scheduleBuilder  任务对应的调度规则
//     * @author XiaoYunSong <ys.xiao@idiaoyan.com>
//     * @date 2021/9/16 16:39
//     */
//    private void registerJob(String name, String jobGroupName, String triggerGroupName,
//                             Class<? extends Job> jobClass, ScheduleBuilder<CronTrigger> scheduleBuilder) {
//        String jobName = String.format("%s:job", name);
//        String triggerName = String.format("%s:trigger", name);
//
//        JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
//        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
//
//        try {
//            JobDetail jobDetail = JobBuilder.newJob(jobClass)
//                    .withIdentity(jobName, jobGroupName)
//                    .storeDurably(true)
//                    .requestRecovery(true)
//                    .build();
//            Trigger trigger = TriggerBuilder.newTrigger()
//                    .startNow()
//                    .withIdentity(triggerName, triggerGroupName)
//                    .withSchedule(scheduleBuilder)
//                    .build();
//
//            // 更新调度任务
//            if (scheduler.checkExists(jobKey)) {
//                scheduler.rescheduleJob(triggerKey, trigger);
//            } else if (taskEnable && !scheduler.isShutdown()) { // 向表中注册job
//                scheduler.scheduleJob(jobDetail, trigger);
//                scheduler.start();
//            }
//        } catch (Exception e) {
//            log.error("[Ticket] 新任务 {}-{} 创建失败; ErrorMsg {}", name, jobClass.getSimpleName(), e.getMessage());
//            EMAIL_LOG.error("[Ticket] 新任务 {}-{} 创建失败; ErrorMsg {}", name, jobClass.getSimpleName(), e.getMessage());
//        }
//    }
//}
